#coding=utf-8

"""
自定义opener, urlopen就是已定义好的一个opener.定义步骤如下:
    1. 使用相关的Handler处理器来创建特定功能的处理器对象,这里可以搜索一波,看看有哪些处理器
    2. 然后通过urllib2.build_opener()方法使用这些处理器对象,创建自定义opener对象
    3. 使用自定义的opener对象,调用open()方法发送请求
    4. 注意: 如果程序里所有的请求都使用自定义的opener,可以使用urllib2.install_opener()将自定义的opener对象定义为全局opener,表示如果之后凡是调用urlopen,都将使用这个opener(根据需求选择)
"""

import urllib2


def send_request():
    
    #1. 构建特定功能的处理器对象(HTTPHandler/HTTPSHandler等),debuglevel=1表示将Debug Log打开,这样在程序执行时,会把收包和发包的报头在屏幕上自动打印出来,有时可以省区抓包工作,debuglevel默认为0(即不打印)
    http_handler = urllib2.HTTPHandler(debuglevel=1)
    #2. 使用处理器对象,构建自定义opener,这个opener发送会附带处理器功能
    opener = urllib2.build_opener(http_handler)
    
    headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"}

    url = "http://www.baidu.com/"
    request = urllib2.Request(url, headers=headers)

    #opener = urllib2.build_opener(http_handler)
    #3. 使用opener的open()方法发送请求
    response = opener.open(request)
    #response = urllib2.urlopen("http://www.baidu.com/")
    
    #print(response.read())
    with open('myhandler.html', 'w') as f:
        f.write(response.read())

if __name__ == "__main__":
    send_request()

